;Exam2014H26tPrg2 񂩂aς߂
;--------------------------------
MAIN START
	LAD GR1,TEXT
	LAD GR2,KTBL
	CALL CALC
	ST GR0,ANS
	RET
TEXT DC '  101  +   55  .'
;TEXT DC '  101  - 55  .'
;TEXT DC '  202  * 55  .'
ANS DS 1
KTBL DS 55
	END
;----------------
CALC START
	RPUSH 
	LAD GR2,CTBL   ;
	CALL GETTKN    
	LD GR1,GR2     
	CALL DTOB      ;PQiɕϊ
	ST GR0,AA
	LD GR4,GR0     ;fqSɐݒ@@c @G
	LD GR1,3,GR2
	LD GR3,0,GR1   ; GR3 <---Zq̕R[h 
	SUBL GR3,='*'
	LAD GR1,6,GR2
	CALL DTOB      ;QQiɕϊ
	ST GR0,BB
	LD GR5,GR0     ; GR5ɐݒ
	LD GR3,LTBL,GR3 ; d@@G
	JUMP 0,GR3     ;ZqŎw肳ꂽɃWv
MULT LD GR0,=0     ;Z
	LD GR5,GR5
LP JZE FIN
	LD GR3,GR5
	AND GR3,=#0001 ;搔̍ŉʃrbg̃`FbN
	JZE NEXT
	ADDL GR0,GR4
NEXT SLL GR4,1     ;搔Prbg_Vtg
	SRL GR5,1     ; e @I
	JUMP LP
PLUS ADDL GR4,GR5  ;Z
	LD GR0,GR4
	JUMP FIN
MINUS SUBL GR4,GR5 ;Z
	LD GR0,GR4
FIN RPOP
	RET
CTBL DS 10     ;GETTKNpPǗe[u
LTBL DC MULT   ;Zq̕AhXe[u
	DC PLUS
	DS 1       ;_~[
	DC MINUS
AA DS 1
BB DS 1
	END
;--------------
;GR1ɂ͐̐擪̃AhXi[ēnB
;擪̃AhXԒn̎̔ԒnɌ܂蕶B
;𐔒lɕϊvO
DTOB START
	RPUSH
	LD GR5,=0    ;ʂ̐li[GR5
	LD GR7,1,GR1	;܂蕶AłƓ
	LD GR2,GR7    ;[v񐔂łB
    LD GR6,0,GR1   ;̐擪̃AhX擾
LOOP1 LD GR0,0,GR6 ; GR0 <---̂mڂ̐擾
	AND GR0,=#000F ; lƂĎo
	PUSH 0,GR2     ;GR2 ޔ
	LD GR2,XM,GR2  ;l̈ʎ
	CALL MULT  ;GR0 X GR2 vZAGR0ɌʂĖ߂B 
	POP GR2        ;GR2 ɖ߂
	ADDA GR5,GR0
	LAD GR6,1,GR6 ;̐̃AhX擾
	SUBA GR2,=1   ;[v񐔂ЂƂ炷
	JZE FIN
	JUMP LOOP1
FIN LD GR0,GR5
	RPOP
	RET
XM DC 0,1,10,100,1000,10000
	END
;------------------
;VtgɂZ
;GR0 <---GR0 X GR2
MULT START
	RPUSH
	LD GR1,GR0
	LD GR0,=0
	LD GR3,=15
	LD GR2,GR2
LP JZE FIN
	JPL CONT
	LD GR4,GR1
	SLL GR4,0,GR3
	ADDL GR0,GR4
CONT LAD GR3,-1,GR3
	SLL GR2,1
	JUMP LP
FIN RPOP
	RET
	END
;---------------------------
GETTKN START
	RPUSH
	LD GR3,=-1     ;P̎ʂ̏
	LAD GR1,-1,GR1
LP LAD GR1,1,GR1	  ;P̐擪AhX
	LD GR4,0,GR1   ;
	CPL GR4,='.'
	JZE FIN
	CPL GR4,=' '
	JNZ ALNUM
	CALL SETTKN
	JUMP LP      ;a @C
ALNUM LD GR3,GR3 ;P̏H
	JPL LP       ;̒Pꂪp܂ޏꍇ͂ko
	JZE ACHK     ;̒Pꂪ̏ꍇACHK
	LD GR3,=0    ;̒P̏Jn
;ȉł́APʂhȂhɐݒ
	LD GR6,GR1   ;擪AhXޔ
ACHK CPL GR4,='9'
	JPL NEXT
	CPL GR4,='0'
	JMI NEXT
	JUMP LP     ;ȍꍇ͂ko
NEXT LD GR3,=1   ;Pʂhp܂ށhɐݒ
	JUMP LP
FIN CALL SETTKN
	LD GR5,=-1
	ST GR5,0,GR2 ;I[}[Ni[
	RPOP
	RET
SETTKN LD GR3,GR3
	JMI FIN2     ;PꏈłȂΉȂ
	ST GR6,0,GR2 ;P̐擪AhXi[
	LD GR5,GR1
	SUBL GR5,GR6 ;b @J
	ST GR5,1,GR2 ;P̒i[
	ST GR3,2,GR2 ;P̎ʂi[
	LD GR3,=-1   ;Pʂ(Ԃj
	LAD GR2,3,GR2
FIN2 RET
	END
;--------------------------
